/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */

package org.polarsys.kitalpha.pdt.metamodel.model.platform.provider;


import java.util.Collection;
import java.util.List;

import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
import org.eclipse.emf.edit.provider.ViewerNotification;
import org.polarsys.kitalpha.pdt.metamodel.model.platform.AbstractValue;
import org.polarsys.kitalpha.pdt.metamodel.model.platform.BooleanValue;
import org.polarsys.kitalpha.pdt.metamodel.model.platform.ConfigurationElementAttributeInstance;
import org.polarsys.kitalpha.pdt.metamodel.model.platform.ConfigurationElementAttributeKind;
import org.polarsys.kitalpha.pdt.metamodel.model.platform.JavaClassValue;
import org.polarsys.kitalpha.pdt.metamodel.model.platform.PlatformFactory;
import org.polarsys.kitalpha.pdt.metamodel.model.platform.PlatformPackage;
import org.polarsys.kitalpha.pdt.metamodel.model.platform.StringValue;

/**
 * This is the item provider adapter for a {@link org.polarsys.kitalpha.pdt.metamodel.model.platform.ConfigurationElementAttributeInstance} object.
 * <!-- begin-user-doc -->
 * <!-- end-user-doc -->
 * @generated
 */
public class ConfigurationElementAttributeInstanceItemProvider extends ConfigurationElementAttributeItemProvider {
	/**
	 * This constructs an instance from a factory and a notifier.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public ConfigurationElementAttributeInstanceItemProvider(AdapterFactory adapterFactory) {
		super(adapterFactory);
	}

	/**
	 * This returns the property descriptors for the adapted class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
		if (itemPropertyDescriptors == null) {
			super.getPropertyDescriptors(object);

			addAttributeDefinitionPropertyDescriptor(object);
		}
		return itemPropertyDescriptors;
	}

	/**
	 * This adds a property descriptor for the Attribute Definition feature.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected void addAttributeDefinitionPropertyDescriptor(Object object) {

		itemPropertyDescriptors.add
			(createItemPropertyDescriptor
				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
				 getResourceLocator(),
				 getString("_UI_ConfigurationElementAttributeInstance_attributeDefinition_feature"),
				 getString("_UI_PropertyDescriptor_description", "_UI_ConfigurationElementAttributeInstance_attributeDefinition_feature", "_UI_ConfigurationElementAttributeInstance_type"),
				 PlatformPackage.Literals.CONFIGURATION_ELEMENT_ATTRIBUTE_INSTANCE__ATTRIBUTE_DEFINITION,
				 true,
				 false,
				 true,
				 null,
				 null,
				 null));

	}

	/**
	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
		if (childrenFeatures == null) {
			super.getChildrenFeatures(object);
			childrenFeatures.add(PlatformPackage.Literals.CONFIGURATION_ELEMENT_ATTRIBUTE_INSTANCE__CONTAINED_VALUE);
		}
		return childrenFeatures;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	protected EStructuralFeature getChildFeature(Object object, Object child) {
		// Check the type of the specified child object and return the proper feature to use for
		// adding (see {@link AddCommand}) it as a child.

		return super.getChildFeature(object, child);
	}

	/**
	 * This returns ConfigurationElementAttributeInstance.gif.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Object getImage(Object object) {
		return overlayImage(object, getResourceLocator().getImage("full/obj16/ConfigurationElementAttributeInstance"));
	}

	/**
	 * This returns the label text for the adapted class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public String getText(Object object) {

		/**
		 * CUSTOM_CODE_BEGIN
		 **/

		String label = "";
		ConfigurationElementAttributeInstance CEAI = (ConfigurationElementAttributeInstance) object;
		AbstractValue containedValue = CEAI.getContainedValue();
		
		String value = "";
		if (containedValue != null) {
			if (containedValue instanceof StringValue) {
				value = ((StringValue) containedValue).getValue();
			} else if (containedValue instanceof JavaClassValue) {
				JavaClassValue javaClassValue = (JavaClassValue) containedValue;
				value = javaClassValue.getClassName();
			} else if (containedValue instanceof BooleanValue) {
				value = Boolean.toString(((BooleanValue) containedValue)
						.isValue());
			}
		}
		if((CEAI.getName() != null)&&(!CEAI.getName().isEmpty()))
			label = "" + CEAI.getName();
		if(CEAI.getType()!= null)
			label += " : " + CEAI.getType();
		
		if((value != null)&&(!value.isEmpty()))
			label += " = " + value;

		if (label.length()>0)
			label = label+" [Configuration Element Attribute Instance]";
		else
			label = "[Configuration Element Attribute Instance]";
		return label;
		/**
		 * CUSTOM_CODE_END : []
		 **/


	}
	

	/**
	 * This handles model notifications by calling {@link #updateChildren} to update any cached
	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public void notifyChanged(Notification notification) {
		updateChildren(notification);

		switch (notification.getFeatureID(ConfigurationElementAttributeInstance.class)) {
			case PlatformPackage.CONFIGURATION_ELEMENT_ATTRIBUTE_INSTANCE__CONTAINED_VALUE:
				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
				return;
		}
		super.notifyChanged(notification);
	}

	/**
	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
	 * that can be created under this object.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
		super.collectNewChildDescriptors(newChildDescriptors, object);

				newChildDescriptors.add
					(createChildParameter
						(PlatformPackage.Literals.CONFIGURATION_ELEMENT_ATTRIBUTE_INSTANCE__CONTAINED_VALUE,
						 PlatformFactory.eINSTANCE.createStringValue()));



				newChildDescriptors.add
					(createChildParameter
						(PlatformPackage.Literals.CONFIGURATION_ELEMENT_ATTRIBUTE_INSTANCE__CONTAINED_VALUE,
						 PlatformFactory.eINSTANCE.createJavaClassValue()));



				newChildDescriptors.add
					(createChildParameter
						(PlatformPackage.Literals.CONFIGURATION_ELEMENT_ATTRIBUTE_INSTANCE__CONTAINED_VALUE,
						 PlatformFactory.eINSTANCE.createBooleanValue()));


	}

//INJECTED-CODE-BEGIN : ConfigurationElementAttributeInstance#overlayImage()
/**
* This adds an overlay to the given image if the object is controlled.
*/
@Override
protected Object overlayImage(Object object, Object image) {
		/**
		 * CUSTOM_CODE_BEGIN : [Image provider of
		 * ConfigurationElementAttributeInstance]
		 **/
		ConfigurationElementAttributeInstance CEAI = (ConfigurationElementAttributeInstance) object;
		if (CEAI.getType() == ConfigurationElementAttributeKind.RESOURCE) {
			return super.overlayImage(
					object,
					getResourceLocator()
							.getImage(
									"full/obj16/ConfigurationElementAttribute_resource"));
		} else if (CEAI.getType() == ConfigurationElementAttributeKind.BOOLEAN) {
			return super.overlayImage(
					object,
					getResourceLocator().getImage(
							"full/obj16/ConfigurationElementAttribute_boolean"));
		} else if (CEAI.getType() == ConfigurationElementAttributeKind.JAVA) {
			return super.overlayImage(
					object,
					getResourceLocator().getImage(
							"full/obj16/ConfigurationElementAttribute_java"));
		} else
			return super.overlayImage(
					object,
					getResourceLocator().getImage(
							"full/obj16/ConfigurationElementAttribute_string"));
		/**
		 * CUSTOM_CODE_END : []
		 **/
	}

}
